package day02;

public class DataTypeDemo1 {
    public static void main(String[] args) {
//        八中基本类型：byte，short，int，long，float，double，char，boolean

        int a = 205;
        System.out.println(a/12.0);//浮点型double

//        int a1 =100000000000;初始化超出范围的时候就会直接报错
        int a2 = 1000000000*10;
        System.out.println(a2);//1410065408,这里会溢出不会报错，但是要尽量避免

        long a3 =100000000000L;//如果不在数据后面加L或l 就会报错，默认为int

        long a4 =1000000000*2*10l;
        long a5 =1000000000*3*10l;
        System.out.println(a4);//20000000000
        System.out.println(a5);//1000000000*3这里会发生溢出，值得注意一下-----12949672960

//        浮点型，默认为double，所以想用float的时候，必须在数据后面加f或者F，运算会出现误差，遇到财务的时候，不允许用浮点型
        double f = 2.0,i=1.9;
        System.out.println(f-i);
        float f1 = 3.0f, i1 = 1.9f;
        System.out.println(f1 - i1);

//        布尔类型
        boolean g = true;
        boolean g1 = false;

//        字符型，采用Unicode：统一码，通用码，万国码，世界级通用的定长（16位）字符集
        char char1 = '男';
        char char2 = '\'';
        char char3 = '^';

/*
* 类型间的转换              char
*       由小到大依次为byte，short，int，long，float，double
*       两种方式：
*           自动/隐式类型转换：小类型到大类型
*           强制类型转换：大类型到小类型
*       两种规则：
*           整数直接量可以直接赋值给byte，short，char，但不能超出范围
*           byte，short，char型数据参与运算时，系统会自动将其转化为int再运算
*
*           */
        long longb = 10;
        int intb = (int)longb;//强制类型转换

        long d = 5;//自动类型转换
        double d1 = 5;//int---->double

        long d2 = 10000000000l;
        int d3 = (int) d2;
        System.out.println(d3);//发生强转的时候有可能导致溢出----1410065408

        double d4 = 43.164;
        int d5 = (int) d4;
        System.out.println(d5);//强转有可能导致精度丢失

        byte d6=1,d7 = 6;//不能超过127
        System.out.println((int)d6+d7);

        System.out.println(2+'2');
        System.out.println('2'+'2');//100


    }
}
